//package com.liulimi.fastapi.core.aspect;
//
//import com.liulimi.fastapi.core.exception.asserts.Assert;
//import com.liulimi.fastapi.core.exception.asserts.AuthSignatureAssert;
//import com.liulimi.fastapi.core.http.response.Response;
//import com.liulimi.fastapi.core.http.response.ResultEnum;
//import com.liulimi.fastapi.utils.crypto.SignUtil;
//import org.apache.commons.lang3.StringUtils;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Pointcut;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import javax.servlet.http.HttpServletRequest;
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * @author cuibaoluo
// * @date 2021/1/8
// * @description：  数据过滤处理
// */
//@Aspect
//@Component
//public class SignatureAspect {
//
//    @Value("${sign.appId}")
//    private String appId;
//    @Value("${sign.secret}")
//    private String secret;
//
//    @Resource
//    private HttpServletRequest request;
//
//    /**
//     * 配置织入点
//     */
//    @Pointcut("@annotation(com.liulimi.fastapi.core.annotation.Signature)")
//    public void dataScopePointCut() {
//    }
//
//    @Around("dataScopePointCut()")
//    public Object doBefore(ProceedingJoinPoint point) throws Throwable {
//        return handleAuth(point);
//    }
//
//    protected Object handleAuth(final ProceedingJoinPoint joinPoint) {
//            // 供应商的id，验证用户的真实性
//            String appid = request.getHeader("appid");
//            // 请求发起的时间
//            String timestamp = request.getHeader("timestamp");
//            // 随机数
//            String nonce = request.getHeader("nonce");
//            // 签名算法生成的签名
//            String sign = request.getHeader("sign");
//            if (StringUtils.isEmpty(appid) || StringUtils.isEmpty(timestamp) || StringUtils.isEmpty(nonce) || StringUtils.isEmpty(sign)) {
//                Assert.defaultAssert(ResultEnum.PARAMETER_ERROR,"签名参数为空");
//            }
//            // 限制为（含）60秒以内发送的请求
//            long time = 60;
//            long now = System.currentTimeMillis() / 1000;
//            if (now - Long.parseLong(timestamp) > time) {
//                Assert.defaultAssert(ResultEnum.PARAMETER_ERROR,"请求超时空");
//            }
//            // 校验appid
//            if (!appId.equalsIgnoreCase(appid)) {
//                Assert.defaultAssert(ResultEnum.PARAMETER_ERROR,"非法供应商请求");
//            }
//            Map<String,String> signObj = new HashMap<>(3);
//            signObj.put("appid", appid);
//            signObj.put("timestamp", timestamp);
//            signObj.put("nonce", nonce);
//            String mySign = SignUtil.getSign(signObj, secret);
//            // 校验签名
//            if (!mySign.equals(sign)) {
//                Assert.defaultAssert(ResultEnum.PARAMETER_ERROR,"无效签名");
//            }
//            try {
//                return joinPoint.proceed();
//            } catch (Throwable throwable) {
//                Assert.defaultAssert(ResultEnum.PARAMETER_ERROR,"签名异常");
//            }
//
//        return null;
//    }
//}
